package qlsl.androiddesign.util.runfeng;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.MediaStore;

import java.io.File;
import java.util.List;

import qlsl.androiddesign.entity.commonentity.FragmentArgs;

/**
 * Ctrl shift f 全局搜索 Ctrl n 搜索类 Ctrl shift n 搜索文件
 * 
 * @Description:这个工具类主要通过显式意图来跳转到指定Activity 大家可以再添加一些通过隐式意图来跳转的重载方法.
 * 
 * @163.com,然后我再添加到这个工具类里面,分享给大家.
 */
public class ToActivityUtil {

	/**
	 * @param packageContext
	 * @param action
	 *            含操作的Intent
	 * @Description: 隐式启动, 跳转
	 */
	public static void startActivityIntentSafe(Context packageContext,
			Intent action) {
		// Verify it resolves
		PackageManager packageManager = packageContext.getPackageManager();
		List activities = packageManager.queryIntentActivities(action,
				PackageManager.MATCH_DEFAULT_ONLY);
		boolean isIntentSafe = activities.size() > 0;

		// Start an activity if it's safe
		if (isIntentSafe) {
			packageContext.startActivity(action);
		}

	}

	/**
	 * @param packageContext
	 * @param cls
	 * @param keys
	 * @param values
	 *            手动改变int[] values类型,可以传递其它数据类型,就不重载了
	 * @Description: 跳转, 带参数的方法;需要其它的数据类型,再继续重载吧,暂时只写这么多吧,意义不大
	 */
	public static void toNextActivity(Context packageContext, Class<?> cls,
			String[] keys, int[] values) {
		Intent i = new Intent(packageContext, cls);
		for (int j = 0; j < values.length; j++) {
			i.putExtra(keys[j], values[j]);
		}
		packageContext.startActivity(i);

	}

	/**
	 * @param packageContext
	 *            from,一般传XXXActivity.this
	 * @param cls
	 *            to,一般传XXXActivity.class
	 * @Description: 跳转
	 */
	public static void toNextActivity(Context packageContext, Class<?> cls) {
		Intent i = new Intent(packageContext, cls);
		packageContext.startActivity(i);
	}

	/**
	 * @param packageContext
	 * @param cls
	 * @param keyvalues
	 *            需要传进去的String参数{{key1,values},{key2,value2}...}
	 * @Description: 跳转, 带参数的方法;需要其它的数据类型,再继续重载吧
	 */
	public static void toNextActivity(Context packageContext, Class<?> cls,
			String[][] keyvalues) {
		Intent i = new Intent(packageContext, cls);
		for (String[] strings : keyvalues) {
			i.putExtra(strings[0], strings[1]);
		}

		packageContext.startActivity(i);

	}

	public static void toNextActivityAndFinish(Context packageContext,
			Class<?> cls) {
		Intent i = new Intent(packageContext, cls);
		packageContext.startActivity(i);

		((Activity) packageContext).finish();
	}

	public static void toNextActivityStringAndFinish(Context packageContext,
			Class<?> cls, String key, String value) {
		Intent i = new Intent(packageContext, cls);
		i.putExtra(key, value);
		packageContext.startActivity(i);

		((Activity) packageContext).finish();
	}

	public static void finish(Activity activity) {
		activity.finish();
	}

	public static void toNextActivityAndFinish(Context packageContext,
			Class<?> cls, String key, FragmentArgs value) {
		Intent i = new Intent(packageContext, cls);
		if (value != null) {
			i.putExtra(key, value);
		}
		packageContext.startActivity(i);

		((Activity) packageContext).finish();
	}

	public static void toNextActivity(Context packageContext, Class<?> cls,
			String key, FragmentArgs value) {
		Intent i = new Intent(packageContext, cls);
		if (value != null) {
			i.putExtra(key, value);
		}
		packageContext.startActivity(i);
	}

	/**
	 * 拨打电话
	 * 
	 * @param packageContext
	 * @param phoneNumber
	 *            电话号码
	 */
	public static void callPhoneActivity(Context packageContext,
			String phoneNumber) {
		// 用intent启动拨打电话
		Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
				+ phoneNumber));
		packageContext.startActivity(intent);
	}

	// /////////////////////////////////////////////////////////////////////////////////////////////////////
	// android获取一个用于打开HTML文件的intent
	public static Intent getHtmlFileIntent(String param) {
		Uri uri = Uri.parse(param).buildUpon()
				.encodedAuthority("com.android.htmlfileprovider")
				.scheme("content").encodedPath(param).build();
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.setDataAndType(uri, "text/html");
		return intent;
	}

	// android获取一个用于打开图片文件的intent
	public static Intent getImageFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "image/*");
		return intent;
	}

	// android获取一个用于打开PDF文件的intent
	public static Intent getPdfFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/pdf");
		return intent;
	}

	// android获取一个用于打开文本文件的intent
	public static Intent getTextFileIntent(String param, boolean paramBoolean) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		if (paramBoolean) {
			Uri uri1 = Uri.parse(param);
			intent.setDataAndType(uri1, "text/plain");
		} else {
			Uri uri2 = Uri.fromFile(new File(param));
			intent.setDataAndType(uri2, "text/plain");
		}
		return intent;
	}

	// android获取一个用于打开音频文件的intent
	public static Intent getAudioFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "audio/*");
		return intent;
	}

	// android获取一个用于打开视频文件的intent
	public static Intent getVideoFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "video/*");
		return intent;
	}

	// android获取一个用于打开CHM文件的intent
	public static Intent getChmFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/x-chm");
		return intent;
	}

	// android获取一个用于打开Word文件的intent
	public static Intent getWordFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/msword");
		return intent;
	}

	// android获取一个用于打开Excel文件的intent
	public static Intent getExcelFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/vnd.ms-excel");
		return intent;
	}

	// android获取一个用于打开PPT文件的intent
	public static Intent getPptFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
		return intent;
	}

	// android获取一个用于打开PPT文件的intent
	public static Intent getAllFileIntent() {
		Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
		intent.setType("*/*");
		intent.addCategory(Intent.CATEGORY_OPENABLE);
		return intent;
	}

}
